﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ProyectoVeranoAECAasp.Negocios.Clases;
using ProyectoVeranoAECAasp.AccesoDatos.ClasesMiscelaneas;
using ProyectoVeranoAECAasp.Clases;

namespace ProyectoVeranoAECAasp.Vistas
{
    public partial class SolicitarReservacion : System.Web.UI.Page
    {
        ProcesosSolicitarReservacion enlaceNegociosSolicRes = new ProcesosSolicitarReservacion();
        List<String> listaEscuelasTodo;
        List<String> listaCarrerasXEscuela;
        List<String> listaCarrerasNombre;
       

        protected void Page_Load(object sender, EventArgs e)
        {
            this.NombreEtiquetaGroup.Text = Global.get_nombreUserLog();
            this.LoginEtiquetaGroup.Text = Global.get_loginUserLog();
            this.TipoUsuarioGroup.Text = Global.get_tipoUserLog();
        }

        protected void LinkButtonSalir_Click(object sender, EventArgs e)
        {
            Session["UsuarioID"] = null;
            Session["TipoUsuarioGlobal"] = null;
            Response.Redirect("/Vistas/Autenticacion.aspx");
        }

        protected void DropDownEspaciosSR_Init(object sender, EventArgs e)
        {
            List<String> listaEspacios;
            //----
            listaEspacios = enlaceNegociosSolicRes.llamar_ejecutaSP_ObtenerListaEspacios();
            DropDownEspaciosSR.DataSource = listaEspacios;
            DropDownEspaciosSR.DataBind();
        }

        protected void DropDownEscuelasSR_Init(object sender, EventArgs e)
        {
            List<String> listaEscuelasNombre = new List<String>();
            //----
            listaEscuelasTodo = enlaceNegociosSolicRes.llamar_ejecutaSP_ObtenerListaEscuelas();

            for (int i = 0; i < listaEscuelasTodo.Count; i++)
            {
                i = i + 1;
                listaEscuelasNombre.Add(listaEscuelasTodo[i]);
            }

            DropDownEscuelasSR.DataSource = listaEscuelasNombre;
            DropDownEscuelasSR.DataBind();
        }

        protected void DropDownCarreraSR_Init(object sender, EventArgs e)
        {
            obtenerCarrerasXEscuela();
            DropDownCarreraSR.DataSource = listaCarrerasNombre;
            DropDownCarreraSR.DataBind();
        }

        protected void DropDownEscuelasSR_SelectedIndexChanged(object sender, EventArgs e)
        {
            obtenerCarrerasXEscuela();
            DropDownCarreraSR.DataSource = listaCarrerasNombre;
            DropDownCarreraSR.DataBind();
        }

        protected void BotonAceptarEspFecha_Click(object sender, EventArgs e)
        {
            this.GridHorasReservas.Visible = false;
            this.EtiquetaIndicaReservacionesSR.Visible = false;
            this.CheckBoxReservarTodoDia.Visible = false;
            this.CheckBoxReservarTodoDia.Checked = false;
            this.ListBoxHorasEscoger.Items.Clear();
            this.ListBoxHorasEscogidas.Items.Clear();

            if ((startdate.Text != null) && (startdate.Text != ""))
            {
                if (verificarFecha())
                {
                    this.BotonAceptarHacerSolSR.Enabled = true;
                    Global.set_ListaHorarioOcupado(enlaceNegociosSolicRes.llamar_ejecutaSP_ObtenerHorasAsuntoUserXEspacioResXFecha(
                        startdate.Text, DropDownEspaciosSR.SelectedValue.ToString()));
                    if (Global.get_ListaHorarioOcupado().Count != 0)
                    {
                        this.GridHorasReservas.Visible = true;
                        GridHorasReservas.DataSource = Global.get_ListaHorarioOcupado();
                        GridHorasReservas.DataBind();

                        //---- Llenado de ListBox
                        List<String> listaHorarioCompleto = enlaceNegociosSolicRes.llamar_traerHorasADisposicion();
                        for (int i = 0; i < Global.get_ListaHorarioOcupado().Count; i++)
                        {
                            if (listaHorarioCompleto.Contains(Global.get_ListaHorarioOcupado()[i].HoraModalidad))
                            {
                                listaHorarioCompleto.Remove(Global.get_ListaHorarioOcupado()[i].HoraModalidad);
                            }
                        }
                        this.ListBoxHorasEscoger.DataSource = listaHorarioCompleto;
                        this.ListBoxHorasEscoger.DataBind();
                    }
                    else
                    {
                        //---- Reservar TODO el día
                        this.EtiquetaIndicaReservacionesSR.Visible = true;
                        List<String> listaHorarioCompleto = enlaceNegociosSolicRes.llamar_traerHorasADisposicion();
                        this.ListBoxHorasEscoger.Items.Clear();
                        this.ListBoxHorasEscoger.DataSource = listaHorarioCompleto;
                        this.ListBoxHorasEscoger.DataBind();
                        this.ListBoxHorasEscogidas.Items.Clear();
                        this.EtiquetaIndicaReservacionesSR.Text = @"No hay reservaciones en esta fecha para este espacio. 
                        Si gusta, puede reservar el día completo. De ser así marque la siguiente opción:";
                        this.CheckBoxReservarTodoDia.Visible = true;
                    }
                }
                else
                {
                    //****** MOSTRAR MENSAJE DE FECHA INVALIDA *******
                }
            }
        }

        protected void GridHorasReservas_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            //----
            GridHorasReservas.PageIndex = e.NewPageIndex;
            GridHorasReservas.SelectedIndex = -1;
            GridHorasReservas.DataSource = Global.get_ListaHorarioOcupado();
            GridHorasReservas.DataBind();
        }

        protected void ListBoxHorasEscoger_SelectedIndexChanged(object sender, EventArgs e)
        {
            String itemSeleccionado;
            //----
            itemSeleccionado = ListBoxHorasEscoger.SelectedItem.ToString();
            ListBoxHorasEscogidas.Items.Add(new ListItem(itemSeleccionado));
            ListBoxHorasEscoger.Items.Remove(ListBoxHorasEscoger.SelectedItem);
            //----
        }

        protected void ListBoxHorasEscogidas_SelectedIndexChanged(object sender, EventArgs e)
        {
            String itemSeleccionado;
            //----
            itemSeleccionado = ListBoxHorasEscogidas.SelectedItem.ToString();
            ListBoxHorasEscoger.Items.Add(new ListItem(itemSeleccionado));
            ListBoxHorasEscogidas.Items.Remove(ListBoxHorasEscogidas.SelectedItem);
            //----
        }

        protected void BotonAceptarHacerSolSR_Click(object sender, EventArgs e)
        {
            int seReservaTodo = 0;
            List<String> listaHorasAReservar = new List<String>();
            String espacioReservar;
            DateTime fechaReservar;
            String asuntoSolicitud;
            String descripcionSolicitud;
            int cantidadHorasReservadas;
            int idEscuelaSolicitud;
            int idCarreraSolicitud;
            int IDUsuarioEmisor = 0;
            //----
            if ((startdate.Text != null) && (startdate.Text != "") &&
                (this.TextBoxAsuntoSR.Text != null) && (this.TextBoxAsuntoSR.Text != "") &&
                (this.TextBoxDescSR.Text != null) && (this.TextBoxDescSR.Text != ""))
            {
                //---- Validar su es que se reserva todo el día, que se chequee el box
                if ((this.CheckBoxReservarTodoDia.Checked) && (this.ListBoxHorasEscoger.Enabled == false)&&
                    (this.ListBoxHorasEscogidas.Enabled == false))
                {
                    this.EtiquetaAyudaElecHorario2SR.Text = "Todo Completo";
                    // Refrescar lista de carreras por escuela
                    obtenerCarrerasXEscuela();
                    // Se reserva todo
                    seReservaTodo = 1;
                    // ID del usuario en sesión
                    IDUsuarioEmisor = Global.get_IDUsuarioEnSesion();
                    // id espacio
                    espacioReservar = this.DropDownEspaciosSR.SelectedValue.ToString();
                    // id escuela
                    int idListaEscuelas = listaEscuelasTodo.IndexOf(this.DropDownEscuelasSR.SelectedValue.ToString()) - 1;
                    idEscuelaSolicitud = Convert.ToInt32(listaEscuelasTodo[idListaEscuelas]);
                    // id de carrera
                    int idListaCarrerasXEsc = listaCarrerasXEscuela.IndexOf(this.DropDownCarreraSR.SelectedValue.ToString()) - 1;
                    idCarreraSolicitud = Convert.ToInt32(listaCarrerasXEscuela[idListaCarrerasXEsc]);
                    // fecha
                    fechaReservar = Convert.ToDateTime(this.startdate.Text);
                    // Asunto
                    asuntoSolicitud = this.TextBoxAsuntoSR.Text;
                    // Descripcion
                    descripcionSolicitud = this.TextBoxDescSR.Text;
                    // Lista horas (todas las horas porq se reserva todo)
                    // * Se pasa la list vacía *
                    // Cantidad total horas
                    cantidadHorasReservadas = 24;

                    // Llamar al metodo de registro
                    enlaceNegociosSolicRes.llamar_ejecutaSP_HacerSolicitud_SP_HacerHorario(
                        seReservaTodo, asuntoSolicitud, idEscuelaSolicitud, idCarreraSolicitud, 
                        descripcionSolicitud, cantidadHorasReservadas,
                        fechaReservar, listaHorasAReservar, espacioReservar, IDUsuarioEmisor);
                    
                    //++++ MOSTRAR MENSAJE SOLICITUD HECHA ++++

                    //---- Limpiar controles
                    this.ListBoxHorasEscoger.Items.Clear();
                    this.ListBoxHorasEscogidas.Items.Clear();
                    this.GridHorasReservas.Columns.Clear();
                    this.TextBoxAsuntoSR.Text = "";
                    this.TextBoxDescSR.Text = "";
                    this.startdate.Text = "";
                }
                //---- Validar si se reservan unas horas
                else
                {
                    //---- Validar que, como no se reserva todo el día, se hayan seleccionado
                    //---- horas
                    if (this.ListBoxHorasEscogidas.Items.Count != 0)
                    {
                        //this.EtiquetaAyudaElecHorario2SR.Text = "Todo Completo";
                        // Refrescar lista de carreras por escuela
                        obtenerCarrerasXEscuela();
                        // No se reserva todo
                        seReservaTodo = 0;
                        // ID del usuario en sesión
                        IDUsuarioEmisor = Global.get_IDUsuarioEnSesion();
                        // id espacio
                        espacioReservar = this.DropDownEspaciosSR.SelectedValue.ToString();
                        // id escuela
                        int idListaEscuelas = listaEscuelasTodo.IndexOf(this.DropDownEscuelasSR.SelectedValue.ToString()) - 1;
                        idEscuelaSolicitud = Convert.ToInt32(listaEscuelasTodo[idListaEscuelas]);
                        // id de carrera
                        int idListaCarrerasXEsc = listaCarrerasXEscuela.IndexOf(this.DropDownCarreraSR.SelectedValue.ToString()) - 1;
                        idCarreraSolicitud = Convert.ToInt32(listaCarrerasXEscuela[idListaCarrerasXEsc]);
                        // fecha
                        fechaReservar = Convert.ToDateTime(this.startdate.Text);
                        // Asunto
                        asuntoSolicitud = this.TextBoxAsuntoSR.Text;
                        // Descripcion
                        descripcionSolicitud = this.TextBoxDescSR.Text;
                        // Lista horas
                        foreach (var item in ListBoxHorasEscogidas.Items)
                        {
                            listaHorasAReservar.Add(item.ToString());
                        }
                        // Cantidad total horas
                        cantidadHorasReservadas = listaHorasAReservar.Count;

                        // Llamar al metodo de registro
                        enlaceNegociosSolicRes.llamar_ejecutaSP_HacerSolicitud_SP_HacerHorario(
                            seReservaTodo, asuntoSolicitud, idEscuelaSolicitud, idCarreraSolicitud,
                            descripcionSolicitud, cantidadHorasReservadas,
                            fechaReservar, listaHorasAReservar, espacioReservar, IDUsuarioEmisor);

                        //++++ MOSTRAR MENSAJE SOLICITUD HECHA ++++

                        //---- Limpiar controles
                        this.ListBoxHorasEscoger.Items.Clear();
                        this.ListBoxHorasEscogidas.Items.Clear();
                        this.GridHorasReservas.Columns.Clear();
                        this.TextBoxAsuntoSR.Text = "";
                        this.TextBoxDescSR.Text = "";
                        this.startdate.Text = "";
                    }
                    //---- Validar si no se seleccionan horas
                    else
                    {
                        //this.EtiquetaAyudaElecHorario2SR.Text = "falta algo";
                        //****** MOSTRAR MENSAJE DE QUE FALTA ALGO DE RELLENAR ********//
                    }
                }
            }
            else
            {
                //this.EtiquetaAyudaElecHorario2SR.Text = "falta algo";
                //****** MOSTRAR MENSAJE DE QUE FALTA ALGO DE RELLENAR ********//
            }
        }

        protected void CheckBoxReservarTodoDia_CheckedChanged(object sender, EventArgs e)
        {
            if (this.CheckBoxReservarTodoDia.Checked)
            {
                this.ListBoxHorasEscoger.Enabled = false;
                this.ListBoxHorasEscogidas.Enabled = false;
            }
            else
            {
                this.ListBoxHorasEscoger.Enabled = true;
                this.ListBoxHorasEscogidas.Enabled = true;
            }
        }
            

//==========================================================================================
// - METODOS VARIOS -

        // - obtenerCarrerasXEscuela: Permite obtener las carreras por una escuela específica
        // y setear el dropDown de las carreras
        public void obtenerCarrerasXEscuela()
        {
            int idSeleccionEscuela = 0;
            listaCarrerasNombre = new List<String>();
            //----
            idSeleccionEscuela = DropDownEscuelasSR.SelectedIndex;
            idSeleccionEscuela = idSeleccionEscuela + 1;

            listaCarrerasXEscuela = enlaceNegociosSolicRes.llamar_ejecutaSP_ObtenerListaCarrerasXEscuela(idSeleccionEscuela);

            for (int i = 0; i < listaCarrerasXEscuela.Count; i++)
            {
                i = i + 1;
                listaCarrerasNombre.Add(listaCarrerasXEscuela[i]);
            }
        }

        // - verificarFecha: Permite verificar que la fecha esté bien y validada
        // y elimina la fecha si está adulterada
        public Boolean verificarFecha()
        {
            Boolean correctituFecha = false;
            String fechaString;
            DateTime fechaDateTime;
            //----
            fechaString = this.startdate.Text;
            try
            {
                fechaDateTime = DateTime.ParseExact(fechaString, "dd/MM/yyyy", null);
                correctituFecha = true;
            }
            catch
            {
                correctituFecha = false;
            }
            //----
            return correctituFecha;
        }
    }
}